package it.fantacalcio.spring.service;

import it.fantacalcio.hibernate.dao.GiocatoreDAO;
import it.fantacalcio.hibernate.sessionfactory.HibernateSessionFactory;
import it.fantacalcio.model.Giocatore;

import java.util.List;

import org.hibernate.Transaction;

public class GiocatoreServiceImpl implements GiocatoreService {
	
	private GiocatoreDAO giocatoreDAO;
	
	public GiocatoreDAO getGiocatoreDAO() {
		return giocatoreDAO;
	}

	public void setGiocatoreDAO(GiocatoreDAO giocatoreDAO) {
		this.giocatoreDAO = giocatoreDAO;
	}
	
	//----------------------------------------------------------------------------------
	
	@Override
	public int salva(Giocatore giocatore) throws Exception {
		if(giocatore==null){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				giocatoreDAO.save(giocatore);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public int cancella(Giocatore giocatore) throws Exception {
		if(giocatore==null || giocatore.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				giocatoreDAO.delete(giocatore);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public int modifica(Giocatore giocatore) throws Exception {
		if(giocatore==null || giocatore.getId()<1){
			return -1;
		}
		try{
			Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
				giocatoreDAO.update(giocatore);
			tx.commit();
		}catch(Exception e){
			e.printStackTrace();
			return -2;
		}
		return 1;
	}
	
	@Override
	public Giocatore get(Long id) throws Exception {
		if(id<1){
			return null;
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		Giocatore giocatore = giocatoreDAO.get(id);
		tx.commit();
		return giocatore;
	}

	@Override
	public List<Giocatore> list() throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Giocatore> result = giocatoreDAO.list();
		tx.commit();
		return result;
	}
	
	@Override
	public List<Giocatore> findByExample(Giocatore giocatore) throws Exception {
		if(giocatore==null){
			return null;
		}
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Giocatore> result = giocatoreDAO.findByExample(giocatore);
		tx.commit();
		return result;
	}
	@Override
	public List<Giocatore> search(Giocatore giocatore,
			Integer rangeValore) throws Exception {
		
		if(giocatore==null && rangeValore==null){
			return null;
		}
		giocatore = controllaGiocatore(giocatore);
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<Giocatore> result = giocatoreDAO.search(giocatore, rangeValore);
		tx.commit();
		return result;
		
	}
	
	public List<String> listaSquadreReali() throws Exception{
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		List<String> result = giocatoreDAO.listaSquadreReali();
		tx.commit();
		return result;
	}
	
	@Override
	public void deleteAll() throws Exception {
		Transaction tx = HibernateSessionFactory.getSession().beginTransaction();
		giocatoreDAO.deleteAll();
		tx.commit();
		return;
	}
	
	private Giocatore controllaGiocatore(Giocatore giocatore){
		if(giocatore.getValore()==0){
			giocatore.setValore(null);
		}
		if(giocatore.getGol()==0){
			giocatore.setGol(null);
		}
		if(giocatore.getPresenze()==0){
			giocatore.setPresenze(null);
		}
		return giocatore;
	}

}
